The security of computing resources and associated data is of high importance in many contexts. As an example, organizations often utilize networks of computing devices to provide a robust set of services to their users. Networks often span multiple geographic boundaries and often connect with other networks. An organization, for example, may support its operations using both internal networks of computing resources and computing resources managed by others. Computers of the organization, for instance, may communicate with computers of other organizations to access and/or provide data while using services of another organization. In many instances, organizations configure and operate remote networks using hardware managed by other organizations, thereby reducing infrastructure costs and achieving other advantages. With such configurations of computing resources, ensuring that access to the resources and the data they hold is secure can be challenging, especially as the size and complexity of such configurations grow.
Encryption, for example, is used extensively for the purpose of preventing unauthorized access to data. Generally, a cryptographic key is used to reversibly transform data to a state where information is both computationally and humanly unascertainable without access to the cryptographic key or without extraordinary measures (e.g., a cryptographic attack). Many encryption algorithms rely on the use of an initialization vector (IV) for encryption, decryption, and other cryptographic operations. An initialization vector is an arbitrary number that may be used for encryption only once with a particular cryptographic key. The initialization vector may be random/pseudorandom or may be stateful. In some systems, there may be greater risk of security threats as a cryptography key is repeated used to perform cryptographic operations, exhausting more and more of the available initialization vectors. In some systems, it may be desirable to rotate the use of cryptographic keys by decrypting data encrypted under a cryptographic key and encrypting the data under a second cryptographic key. However, the process of decrypting and encrypting data may be computationally expensive and present resource and/or performance constraints on some systems, especially in scalable systems.